package cn.impl;

import cn.annotation.EquipmentLog;
import cn.annotation.Log;
import cn.basic.HibBaseDAOImpl;
import cn.basic.iHibBaseDAO;
import cn.common.properties.EquipmentType;
import cn.common.properties.LogOperType;
import cn.dao.ServiceDAO;
import cn.model.TService;
import cn.model.VServiceEquipment;
import org.springframework.stereotype.Component;

import java.util.List;

@Component("servicedao")
public class ServiceDAOImpl implements ServiceDAO {


    //连接数据库操作层接口,实现业务与数据的交换
    private iHibBaseDAO bdao= null;
    private iHibBaseDAO bd;

    public ServiceDAOImpl(){
        bdao = new HibBaseDAOImpl();
    }
    /**
     * 添加一条维护信息
     *
     * @param service 对象
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.ADD,operationName="添加一条设备维护信息")
    @Log(isSaveLog=true,operationType= LogOperType.ADD,operationName="添加一条设备维护信息")
    @Override
    public int addService(TService service) {
        return (Integer) bdao.insert(service);
    }

    /**
     * 删除一条维护信息
     *
     * @param serviceid 编号
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.DELETE,operationName="删除一条设备维护信息")
    @Log(isSaveLog=true,operationType= LogOperType.DELETE,operationName="删除一条设备维护信息")
    @Override
    public boolean deleteService(int serviceid) {
        return bdao.delete(serviceid);
    }

    /**
     * 修改一条维护信息
     *
     * @param service 需要修改的对象
     * @return
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="修改一条设备维护信息")
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条设备维护信息")
    @Override
    public boolean modifyService(TService service) {
        return bdao.update(service);
    }

    /**
     * 修改一条状态信息
     *
     * @param audit 需要修改的对象
     * @return
     */
    @Log(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="修改一条设备维护状态信息")
    @EquipmentLog(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条设备维护状态信息")
    @Override
    public boolean modifyServiceByid(int serviceid,int audit) {
        String hql ="update T_Service set audit = ? where serviceid = ?";
        Object para[] ={audit,serviceid};
        return bdao.update(hql,para);
    }

    /**
     * 根据条件获取维护信息的列表
     *
     * @param wherecondition 组合查询条件字符串,
     * @param currentPage    按分页查询的当前页
     * @param pageSize       按分页查询的每页数量
     * @return List
     */
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="查询设备维护信息列表")
    @Override
    public List<VServiceEquipment> getServiceList(String wherecondition, int currentPage, int pageSize) {
        String hql ="from VServiceEquipment";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql+=wherecondition;
        }
        if (wherecondition==null && wherecondition.equals("")){
            hql+="order by serviceTime desc";
        }
        return bdao.selectByPage(hql,currentPage,pageSize);
    }

    /**
     * 根据状态查询VService对象
     * @param currentPage    查询开始的页数
     * @param pageSize       查询要求的每页的记录数
     * @return List<VOrder>
     */
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="通过申请状态查询设备维护信息列表")
    @Override
    public List<VServiceEquipment> getServiceStatus(int audit,int currentPage, int pageSize) {
        String hql = "from VServiceEquipment where audit = ?";
        Object[] para = {audit};
        return bdao.selectByPage(hql, para, currentPage, pageSize);
    }

    /**
     * 根据状态查询TVService对象
     * @param currentPage    查询开始的页数
     * @param pageSize       查询要求的每页的记录数
     * @return List<VOrder>
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="通过用户编号查询当前用户申请设备维护信息列表")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="通过用户编号查询当前用户申请设备维护信息列表")
    @Override
    public List<VServiceEquipment> getServiceByUser(String userid,int currentPage, int pageSize) {
        String hql = "from VServiceEquipment where userid = ?";
        Object[] para = {userid};
        return bdao.selectByPage(hql, para, currentPage, pageSize);
    }



    /**
     * 根据条件获取符合条件的维护的数量
     *
     * @param wherecondition
     * @return
     */
    @Override
    public int getServiceAmount(String wherecondition) {
        String hql ="select count(*) from VServiceEquipment";
        return bdao.selectValue(hql);
    }

    /**
     * 根据条件获取符合条件的维护的数量
     *
     * @param userid
     * @return
     */
    @Override
    public int getAmountByUserid(String userid) {
        String hql ="select count(*) from VServiceEquipment where userid = ?";
        Object[] param ={userid};
        return bdao.selectValue(hql,param);
    }

    /**
     * 通过维修ID查询
     *
     * @param serviceid 维修编号
     * @return 返回用户信息列表
     */
    @Override
    public VServiceEquipment getServiceById(int serviceid) {
        return (VServiceEquipment) bdao.findById(VServiceEquipment.class,serviceid);
    }
}
